Top K Frequent Elements
Question
Two bar problem
find best area among ....
""" Given an integer array "nums" and an integer "k", return the "k" most frequent elements. You may return the answer in any order.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2]
Example 2:
Input: nums = [1], k = 1 Output: [1]
Constraints:
1 <= nums.length <= 10^5 -10^4 <= nums[i] <= 10^4 k is in the range [1, the number of unique elements in the array]. It is guaranteed that the answer is unique.
====================================== Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size. """
Solution
- Full
- Simple
heap/Top K Frequent Elements.py
import heapq
from collections import Counter
def get_most_frequent(arr, k):
h = []
m = Counter(arr)
for n, v in m.items():
heapq.heappush(h, (-1 * v, n))
ret = []
for i in range(k):
v, n = heapq.heappop(h)
ret.append(n)
#print(ret)
return ret
# print(get_most_frequent([1, 1, 1, 2, 2, 3], 2))
result = get_most_frequent([4, 4, 4, 5, 5, 5, 5, 2, 2, 1, 1, 1, 1, 1], 3)
#print(result)
Step | ret |
---|---|
1 | [1, 5, 4] |
2 | [1, 5, 4] |
3 | [1, 5, 4] |
result |
---|
[1, 5, 4] |
heap/Top K Frequent Elements.py
import heapq
from collections import Counter
def get_most_frequent(arr, k):
h = []
m = Counter(arr)
for n, v in m.items():
heapq.heappush(h, (-1 * v, n))
ret = []
for i in range(k):
v, n = heapq.heappop(h)
ret.append(n)
#print(ret)
return ret
# print(get_most_frequent([1, 1, 1, 2, 2, 3], 2))
result = get_most_frequent([4, 4, 4, 5, 5, 5, 5, 2, 2, 1, 1, 1, 1, 1], 3)
#print(result)
Step | ret |
---|---|
1 | [1, 5, 4] |
2 | [1, 5, 4] |
3 | [1, 5, 4] |
result |
---|
[1, 5, 4] |